

import java.io.*;

public class lectura {
	
	
	private String directorio;
	private Entrada<String,Integer> [] arr=(Entrada<String,Integer>[])new Object[100];
	private int size;
	private int CantidadRepeticiones = 0;

	
	
	public void CargarDirectorio(String dir) {
		
		
		FileReader fr;
		directorio = dir;
		File f = new File(directorio);
		
		int valor;
		String palabra = "";
		
		//if(!f.exists())

			
		
	try{
		
		File[] ficheros = f.listFiles();
		for(int i=0; i<ficheros.length; i++){
			
			if(ficheros[i].getPath().endsWith("txt")){
				fr = new FileReader(ficheros[i].getPath());
				valor = fr.read();
				while(valor!=-1){
					if(valor >=65 && valor<=90 || valor >=97 && valor<=122 )
						palabra += (char) valor;
					else{
						if(palabra !=""){
							palabra.toLowerCase();
							CantidadRepeticiones++;
							int lugar=busqueda(palabra);
							if(lugar!=-1)
								insertar(lugar,palabra);
							palabra= "";
						}
					}
					valor = fr.read();
				}
				
				}
				
				
			
			
			
			
		}
	}
	catch(IOException e){
		System.out.println(e.getMessage());
	}
	
	}
	
	private String cincoMayores(){
		String retornar= "";
		String provisorio="";
		int mayor =0;
		for(int i=0; i<5; i++){
			for(int j=0; j<size; j++){
				if (arr[j].getValue()> mayor){
					mayor = arr[j].getValue();
					provisorio = arr[j].getKey();
				}
			}
			retornar += provisorio+" "+mayor*100/CantidadRepeticiones+"%\n";
		}
		return retornar;
	}
	
	
	private void resize(){
		Entrada<String,Integer>[] aux=(Entrada<String,Integer> [])new Object[arr.length*2];
		for(int i=0;i<arr.length;i++)
			aux[i]=arr[i];
		
		arr=aux;
	}
	
	private int busqueda(String palabra){
		int ini=0; int fin=arr.length-1;
		while(ini<=fin){
		int medio= (ini+fin)/2;
		if(palabra.equals(arr[medio].getKey())){
			int valor = (arr[medio].getValue());
			arr[medio].setValue(valor++);
			return -1;
		}
		else{
			if(arr[medio].getKey().compareTo(palabra)<0)
				ini=medio+1;
			else
				fin=medio-1;
		}
		return medio; 
		
			
		}
		return -2;
	}
			
    private void insertar(int lugar,String palabra){
    	if(arr[arr.length-2]!=null)
    		resize();
    	
    	for(int i=size;i>=lugar;i--)
    		arr[i+1]=arr[i];
    	
    	
    	arr[lugar]=new Entrada<String,Integer>(palabra,1);
    	
    	  
    }
			
			
	
	

}
